﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using middleware.dominio;
using middleware.utiles;
using middleware.dominio.negocio;
using middleware.dominio.negocio.exception;

namespace middleware
{
    public partial class VentanaAgregarBandejaSalida : Form
    {
        private UserControl ventanaConfiguracion;
        private BandejaSalida bandejaSalida = null;

        public VentanaAgregarBandejaSalida()
        {
            InitializeComponent();
        }
        
        public VentanaAgregarBandejaSalida(BandejaSalida bandeja)
        {
            this.bandejaSalida = bandeja;
            InitializeComponent();
        }

        private void AgregarBandejaEntrada_Load(object sender, EventArgs e)
        {
            List<ITipoBandejaSalida> tiposBandejaSalida = BusinessFactory.getMiddleware().ObtenerTiposBandejasSalida();
            foreach (ITipoBandejaSalida tb in tiposBandejaSalida)
            {
                cboTipo.Items.Add(tb);
            }
            //Controlo si es por modificar, de ser asi precargo los atributos
            if (bandejaSalida != null)
            {
                txtNombre.Text = bandejaSalida.nombre;
                cboTipo.SelectedItem = bandejaSalida.tipoBandeja;
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cboTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            ITipoBandejaSalida tipoSeleccionado = (ITipoBandejaSalida)cboTipo.SelectedItem;
            ventanaConfiguracion = tipoSeleccionado.getVentanaConfiguracion();
            pnlVentanaBandeja.Controls.Clear();
            pnlVentanaBandeja.Controls.Add(ventanaConfiguracion);
            ventanaConfiguracion.Visible = true;
            //Controlo si vino por modifica y cargo la informacion
            if (bandejaSalida != null && bandejaSalida.tipoBandeja.Equals(tipoSeleccionado))
            {
                tipoSeleccionado.setConfiguracionFormulario(ventanaConfiguracion, bandejaSalida.configuracion);
            }
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                bool resultado = false;
                if (cboTipo.SelectedItem != null)
                {
                    ITipoBandejaSalida tipoSeleccionado = (ITipoBandejaSalida)cboTipo.SelectedItem;
                    string configuracion = tipoSeleccionado.getConfiguracionFormulario(ventanaConfiguracion);
                    //Controlo si es modificar o agregar
                    if (bandejaSalida == null)
                        resultado = BusinessFactory.getMiddleware().CrearBandejaSalida(tipoSeleccionado, txtNombre.Text, configuracion) != null;
                    else
                        resultado = BusinessFactory.getMiddleware().ModificarBandejaSalida(bandejaSalida, tipoSeleccionado, txtNombre.Text, configuracion);
                }
                if (resultado)
                    this.Close();
                else
                    MessageBox.Show("Hay datos incorrectos.");
            }
            catch (BusinessException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
